/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package model;

import dao.ClasseDAO;
import dao.FamiliaDAO;
import java.io.Serializable;
import javax.persistence.*;
import javax.persistence.GenerationType;

/**
 *
 * @author JONATAS
 */

@Entity
// @SequenceGenerator(name="materialSequence",sequenceName="seq_material", allocationSize=1)
public class Material implements Serializable {
     
    @Id
    private String mat_id;
    @ManyToOne    
    @JoinColumn(name="fam_id")
    private Familia mat_familia;
    private String mat_identificador;
    private int mat_digitoVerificador;
    @ManyToOne
    @JoinColumn(name="unm_id")
    private UnidadeMedida mat_unidadeMedida;
    private String mat_descricao;
    private String mat_imagem;    
    
    public String getMat_id() {
        return mat_id;
    }

    public void setMat_id(String mat_id) {
        this.mat_id = mat_id;
    }   
    
    public String getMat_descricao() {
        return mat_descricao;
    }

    public void setMat_descricao(String mat_descricao) {
        this.mat_descricao = mat_descricao;
    }

    public int getMat_digitoVerificador() {
        return mat_digitoVerificador;
    }

    public void setMat_digitoVerificador(int mat_digitoVerificador) {
        this.mat_digitoVerificador = mat_digitoVerificador;
    }
    
    public String getMat_imagem() {
        return mat_imagem;
    }

    public void setMat_imagem(String mat_imagem) {
        this.mat_imagem = mat_imagem;
    }

    public UnidadeMedida getMat_unidadeMedida() {
        return mat_unidadeMedida;
    }

    public void setMat_unidadeMedida(UnidadeMedida mat_unidadeMedida) {
        this.mat_unidadeMedida = mat_unidadeMedida;
    }
    
    public Classe getMat_classe() {
        return mat_familia.getFam_classe();
    }
        
    public Familia getMat_familia() {
        return this.mat_familia;
    }

    public void setMat_familia(Familia mat_familia) {
        this.mat_familia=mat_familia;
    }

    public String getMat_identificador() {
        return mat_identificador;
    }

    public void setMat_identificador(String mat_identificador) {
        this.mat_identificador = mat_identificador;
    }  
    public void setMat_codigoCompleto(String mat_codigoCompleto){
        
        String classe = mat_codigoCompleto.substring(0, 2);
        String familia = mat_codigoCompleto.substring(2, 4);
        String id_material = mat_codigoCompleto.substring(4, 11);

        System.out.println("Selecionou Familia id -> " + mat_codigoCompleto);
        
        
        this.setMat_id(mat_codigoCompleto);
        this.setMat_identificador(id_material);
               
        System.out.println("material: " + id_material);

        Familia fid = new Familia();      
        
        FamiliaDAO fao = new FamiliaDAO();        
        fid = fao.findById(familia);
        this.setMat_familia(fid);
        
        Classe cla = new Classe();
        cla.setCla_id(classe);
        fid.setFam_classe(cla);
        
        System.out.println("fam: " + familia);
                                
        this.setMat_digitoVerificador(this.gerarDigitoVerificador(mat_codigoCompleto));
        
    }   
    
    public String getMat_codigoCompleto(){
        this.mat_id = this.getMat_classe().getCla_id()+getMat_familia().getFam_id()+getMat_identificador()+getMat_digitoVerificador()+"";        
        return (this.getMat_classe().getCla_id()+getMat_familia().getFam_id()+getMat_identificador()+getMat_digitoVerificador()+"");        
    }
    
    public int gerarDigitoVerificador(String mat_codigoCompleto){
        
        int classe = Integer.parseInt(mat_codigoCompleto.substring(0, 2));
        int familia = Integer.parseInt(mat_codigoCompleto.substring(2, 4));
        int id_material = Integer.parseInt(mat_codigoCompleto.substring(4, 11));
        
        int soma = classe+familia+id_material;
        int multiplicacao = classe*familia*id_material;
        int dv = (soma*multiplicacao)%11;
                        
        return dv;       
    }
       
    @Override
    public String toString(){
        return this.getMat_descricao();
    }  
}
